//
//  EZCDBTestModel.cpp
//  zhaitu
//
//  Created by ellzu on 13-7-31.
//  Copyright (c) 2013年 ellzu. All rights reserved.
//

#include "EZCDBTestModel.h"
#include "EZCDataBase.h"
#include <map>
#include "EZTallyArray.h"
#include "EZTallyDictionary.h"
#include "EZAutoreleasePool.h"
#include "EZAutoreleasePoolManager.h"



EZCDBTestModel::EZCDBTestModel()
{
    t2 = new Test2();
    ccc = 0;
    str1 = "554111222333";
    str2 = "0";
    std::cout << "new EZCDBTestModel"<<std::endl;
}

EZCDBTestModel::~EZCDBTestModel()
{
    if (ccc) {
        delete ccc;
    }
    delete t2;
    std::cout << "delete EZCDBTestModel"<<std::endl;
}

//int EZCDBTestModel::setValueForKey(const std::string &key,void *value_)
//{
//    if (key.compare("str1")==0) {
//        std::string *value = static_cast<std::string*>(value_);
//        str1 = *value;
//    }else if(key.compare("str2")==0){
//        std::string *value = static_cast<std::string*>(value_);
//        str2 = *value;
//    }
//    return 0;
//}



void EZCDBTestModel::ggggg(const std::string &value)
{
    str1 = value;
}
void EZCDBTestModel::dbsetStr1Value(const void *value)
{
//    std::string *str =(std::string*)(value);
    str1 = std::string((const char*)value);
}
void* EZCDBTestModel::dbGetStr1Value()
{
    return &str1;
}
void EZCDBTestModel::TestDatabase(const std::string &dbPatch)
{

    //autorelease pool 测试
//    {
//        EZCDBTestModel *tmm1 = new EZCDBTestModel();
//        tmm1->AuroRelease();
//        
//        EZAutoreleasePool pool1;
//        
//        tmm1->AuroRelease();
//        
//        EZCDBTestModel *tmm2 = new EZCDBTestModel();
//        tmm2->AuroRelease();
//        
//        EZAutoreleasePool *pool2 = new EZAutoreleasePool();
//        EZCDBTestModel *tmm3 = new EZCDBTestModel();
//        tmm3->AuroRelease();
//        pool2->Release();
//        
//        std::cout << ""<<std::endl;
//    }
//    EZAutoreleasePoolManager *manager = EZAutoreleasePoolManager::DefaultManager();
    
    EZCDBNS::EZCDataBase *dataBase = new EZCDBNS::EZCDataBase();
    dataBase->setDataBaseFilePath(dbPatch);
    
    std::string s = typeid(EZCDBTestModel).name();
    REGIST_EZCDataBaseTable(EZCDBTestModel,dataBase);
    
    EZCDBTestModel tm;
    dataBase->SaveObject(&tm);
    
    
    tm.str1 = "1";
    EZTally::EZTallyAutoPtr ptr =dataBase->FindObjectsOne(&tm, 0,true);
    EZCDBTestModel *tm2 = (EZCDBTestModel*)ptr.Get();
    tm2->ccc = 0;
    
    dataBase->Release();
    printf("...");
    printf("...");
    printf("...");
//    char *aa = "234234";
//    
//    std::string *str ;
//    std::string a = (typeof(str1))aa;
//    str = (typeof(str))aa;
//    std::cout << tm.str1 << "  "<< a << "" << str <<"   " << tm.str2 << std::endl;
    
}

std::vector<EZCDBNS::EZCDBFieldInfo*> EZCDBTestModel::DatabaseField()
{
    std::vector<EZCDBNS::EZCDBFieldInfo*> fields;
    
    EZCDBNS::EZCDBFieldInfo *info = new EZCDBNS::EZCDBFieldInfo();
    info->fileName = "str1";
    info->typeName = "std::string";
    info->typeIdName = typeid(str1).name();
    info->dbFieldName = "t_str1";
    info->dbIdentify = "PRIMARY KEY";
    info->dbTypename = "TEXT";
    info->dbtype = EZCDBNS::EZCDataBase_text;
    
    info->svFunc = (EZCDBNS::FNDBSetValue)&EZCDBTestModel::dbsetStr1Value;
    info->gvFunc = (EZCDBNS::FNDBGetValue)&EZCDBTestModel::dbGetStr1Value;
    
    fields.push_back(info);
    
    return fields;
}



